# 题目：给n个点，判断这n个点能否被两条平行直线穿过
# 思路：选定第一个点(x0,y0)， 然后遍历剩余所有点和(x0,y0)得到的直线。 例如(x0,y0), (x1,y1)确定了一条直线，然后遍历其他所有点，把不在第一条直线上的存在otherline
# 如果是空，表示是1条直线就可以穿过；如果长度是1，返回true；如果大于1，那么由前两个点就能够确定一条直线，先判断是不是和上面平行。然后判断剩余所有点是不是都在该直线上
def isvalid(points):
    x0,y0 = points[0][0],points[0][1]
    for i in range(1,len(points)):
        x1,y1 = points[i][0],points[i][1]
        k = (y1-y0)/(x1-x0)
        b = (x1*y0-y1*x0)/(x1-x0)
        res = points[1:i] + points[i+1:]
        otherline = []
        for point in res:
            x,y = point[0],point[1]
            if k*x+b == y:
                continue
            else:
                otherline.append(point)
        n = len(otherline)
        if n == 0:
            return False
        elif n == 1:
            return True
        else:
            nx0,ny0,nx1,ny1 = otherline[0][0],otherline[0][1], otherline[1][0],otherline[1][1]
            nk = (ny1-ny0)/(nx1-nx0)
            nb = (nx1*ny0-ny1*nx0)/(nx1-nx0)
            if nk != k:
                return False
            for newpoint in otherline[2:]:
                nx,ny = newpoint[0],newpoint[1]
                if nk * nx + nb != ny:
                    return False
            return True
points = [[0,0],[1,1],[2,2],[3,3],[0,1],[1,2],[2,3]]
print(isvalid(points))











